#include <cstddef>
#include <cstdio>
#include <ctime>
#include <iostream>
#include <sys/timerfd.h>
#include <unistd.h>
using namespace std;
int main() {
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0);
    if(timerfd < 0) {
        perror("timerfd_create error");
        return -1;
    }
    struct itimerspec itime;
    itime.it_value.tv_sec = 1; // 秒
    itime.it_value.tv_nsec = 0; // 这里是纳秒，设置第一次超时的时间是1秒钟后 
    itime.it_interval.tv_sec = 1;
    itime.it_interval.tv_nsec = 0; // 这里设置的是第一次超时之后我们的下一次超时的时间是1秒
    timerfd_settime(timerfd, 0, &itime, NULL);

    while(1) {
        sleep(5);
        uint64_t time;
        int ret = read(timerfd, &time, 8);
        if(ret < 0) {
            perror("read");
            return -1;
        }
        cout << "超时，距离上一次超时了" << time << "次！" << endl;
    }
    close(timerfd);
    return 0;
}